package com.cskaoyan.javase.oop1._17oop;

import java.util.TreeMap;

/**
 * 把大象放进冰箱里，需要两个对象：
 *      1.冰箱
 *          行为：开门和关门
 *      2.大象
 *          行为：进冰箱里
 *
 * 面向对象程序的优缺点:
 *  优点:
 *      1.面向对象程序的基本组成单位是对象,每个对象之间是相对独立的.这样程序开发就可以划分模块进行,而且不同模块之间是相对独立的.这样的好处是有利于协作开发,尤其是当程序的规模比较大时.降低了开发的难度
 *      2.有利于提升程序的可维护性和扩展性.
 *  缺点:
 *      1.花里胡哨.面向对象程序会不可避免的写很多方法来完成对象之间的交互,或者状态的访问改变等等.这会导致程序
 *          越来越臃肿,代码量越来越多,最后都变成了"shi山"
 *          我们使用面向对象思想开发程序的本质和初心是为了简化程序开发,提升程序的扩展性,但最终我们都会违背初心
 *      2.缺点：像Java这种，具有面向对象特性语言编写的程序，内存开销大运行效率低。对象不是凭空产生的，需要时间创建和内存存储。
 *
 * 所以面向对象思想，适合于开发大型的企业级应用（业务逻辑复杂，业务场景经常变更），如果只是一个简单的小需求，还不如直接面向过程完成。
 *
 * @since 15:48
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo2 {
    public static void main(String[] args) {
        // 创建对象,利用对象来实现功能
        Elephant elephant = new Elephant();
        Fridge fridge = new Fridge();
        elephant.f = fridge;

        elephant.intoFridge();
        fridge.openDoor();
        elephant.intoFridge();
        fridge.closeDoor();
    }
}

// 冰箱类
class Fridge {
    // 定义一个布尔类型成员变量,指示冰箱门的状态.
    // false表示关闭,true开着
    boolean doorState = false;

    // 开门
    public void openDoor() {
        // 如果门关着就开门
        if (!doorState) {
            doorState = true;
            System.out.println("冰箱开门了!");
        }
    }

    // 关门
    public void closeDoor() {
        // 如果门开着就关门
        if (doorState) {
            doorState = false;
            System.out.println("冰箱关门了!");
        }
    }
}

// 大象类
class Elephant {
    // 将冰箱对象作为成员变量,方便交互
    Fridge f;


    // 进冰箱
    public void intoFridge() {
        if (f.doorState) {
            System.out.println("我进冰箱了,可以关门了!");
            return;
        }
        System.out.println("冰箱门没开,进不去!快开门!");
    }
}
